import { reactive, toRefs } from 'vue'
import { defineStore } from 'pinia'
/**
 * @description: 窗口状态管理
 * @param {*} currentScreenisTop 当前窗口是否置顶
 * @param {*} currentScreenisMax 当前窗口是否是最大化
 * @param {*} currentScreenisFull 当前窗口是否是满屏
 * @method watchSreenState 监听窗口状态
 * @attention 1、在App.vue页面加载完成即执行
 *            2、在App.vue页面销毁时，需要移除监听(已撰写，请勿删除App.vue页面onUnmounted里面的方法)
 */

export const useAppState = defineStore('appState', () => {
    const state = reactive({
        currentScreenisTop: false, // 当前窗口是否置顶
        currentScreenisMax: false, // 当前窗口是否是最大化
        currentScreenisFull: false // 当前窗口是否是满屏
    })

    // 监听窗口状态 （App.vue页面加载完成即执行）
    const watchSreenState = () => {
        // 监听是否置顶
        window.electron.ipcRenderer.on('alwaysOnTop', (event, data) => {
            // console.log(data, '<<---是否置顶')
            state.currentScreenisTop = data // 更新当前窗口是否置顶
        })
        // 监听当前窗口的状态
        window.electron.ipcRenderer.on('currentScreenStatus', (event, data) => {
            // console.log(data, '<<---当前窗口的状态')
            switch (data) {
                case 'max':
                    state.currentScreenisMax = true
                    state.currentScreenisFull = false
                    break
                case 'full':
                    state.currentScreenisMax = false
                    state.currentScreenisFull = true
                    break
                case 'normal':
                    state.currentScreenisMax = false
                    state.currentScreenisFull = false
                    break
            }
        })
    }

    /* 封装的electron主进程的相关api方法 start */
    // 关闭当前的窗口
    const closeWindow = () => {
        window.api.closeWindow()
    }
    // 最小化当前的窗口
    const minimizeWindow = () => {
        window.api.minimizeWindow()
    }
    // 最大化当前的窗口
    const maximizeWindow = () => {
        window.api.maximizeWindow()
    }
    // 重启应用
    const restartApp = () => {
        window.api.restartApp()
    }
    // 退出应用
    const quitApp = () => {
        window.api.quitApp()
    }
    // 应用置顶
    const setAlwaysOnTop = () => {
        window.api.setAlwaysOnTop()
    }
    // 应用满屏
    const setFullScreen = () => {
        window.api.setFullScreen()
    }

    /* 封装的electron主进程的相关api方法 end */

    return {
        ...toRefs(state),
        watchSreenState, // 监听窗口状态
        // 封装的electron主进程的相关api方法 start
        closeWindow, // 关闭当前的窗口
        minimizeWindow, // 最小化当前的窗口
        maximizeWindow, // 最大化当前的窗口
        restartApp, // 重启应用
        quitApp, // 退出应用
        setAlwaysOnTop, // 应用置顶
        setFullScreen // 应用满屏
        // 封装的electron主进程的相关api方法 end
    }
})
